package main

import (
	"fmt"
	"math"
	"reflect"
	"runtime"
)

/*
返回值类型写在最后
可返回多个值
函数作为作为参数
没有默认参数，可选参数
*/
func main() {
	q, r := div(6, 3)
	fmt.Println(q, r)
	res := apply(pow, 3, 4)
	fmt.Println(res)

	rangeNubmer(1, 2, 3, 4, 5, 6)

}

func div(a, b int) (q, r int) {
	q = a / b
	r = a % b
	//return a / b, a % b //建议这种
	return
}

func apply(op func(int, int) int, a, b int) int {
	pointer := reflect.ValueOf(op).Pointer()
	opName := runtime.FuncForPC(pointer).Name()
	fmt.Printf("Calling function %s with args (%d,%d)", opName, a, b)
	return op(a, b)
}

func pow(a, b int) int {
	return int(math.Pow(float64(a), float64(b)))
}

func rangeNubmer(numbers ...int) {
	for _, v := range numbers {
		f := math.Pow(float64(v), 2.0)
		fmt.Println(f)
	}
}
